package com.wocao.admin.controller;

import com.wocao.admin.business.EmailBusiness;
import com.wocao.admin.business.SysLoginBusiness;
import com.wocao.admin.vo.login.CheckEmailCodeVo;
import com.wocao.admin.vo.login.LoginVo;
import com.wocao.admin.vo.login.RegisterVo;
import com.wocao.commom.result.Result;
import com.wocao.system.service.EmailService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;

/**
 * 登录控制类
 *
 * @author sunhao
 * @date 2021/8/13
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
@RestController
@Slf4j
@Api(tags = "登录文档")
@RequestMapping("/sys")
public class SysLoginController {

    @Autowired
    private SysLoginBusiness sysLoginBusiness;

    @Autowired
    private EmailBusiness emailBusiness;

    /**
     * 功能描述: 登录账号<br>
     *
     * @param loginVo 账号登录实体
     * @return com.wocao.commom.result.Result<java.lang.String>
     * @author eggg 2021/10/29 14:37
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    @PostMapping(value = "/login")
    @ApiOperation(value = "登录账号", notes = "登录账号")
    public Result<String> login(@RequestBody @Validated LoginVo loginVo) {
        String login = sysLoginBusiness.login(loginVo);
        return Result.SUEECSS(login, "登录成功！");
    }

    /**
     * 功能描述: 注册账号<br>
     *
     * @param registerVo 账号注册实体
     * @return com.dpl.iot.common.result.Result<java.lang.Void>
     * @author eggg 2021/8/14 16:07
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    @PostMapping(value = "/register")
    @ApiOperation(value = "注册账号", notes = "注册账号")
    public Result<Void> register(@RequestBody @Validated RegisterVo registerVo) {
        String result = sysLoginBusiness.register(registerVo);
        if (result == null) {
            return Result.SUEECSS("注册成功!");
        }
        return Result.ERROR(result);
    }

    /**
     * 功能描述: 登出系统<br>
     *
     * @param request 请求实体
     * @return com.wocao.commom.result.Result<java.lang.Void>
     * @author eggg 2021/10/29 14:26
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    @GetMapping(value = "/loginOut")
    @ApiOperation(value = "登出系统", notes = "登出系统")
    public Result<Void> loginOut(HttpServletRequest request) {
        sysLoginBusiness.loginOut(request.getHeader("Authorization"));
        return Result.SUEECSS("登出成功！");
    }

    /**
     * 功能描述: 获取邮件验证码<br>
     *
     * @param email 邮箱地址
     * @return com.wocao.commom.result.Result<java.lang.Void>
     * @author eggg 2021/10/28 20:15
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    @GetMapping(value = "/sendRegisterEmail")
    @ApiOperation(value = "获取邮件验证码", notes = "获取邮件验证码")
    public Result<Void> sendRegisterEmail(String email) {
        String result = emailBusiness.sendRegisterEmail(email);
        if (StringUtils.isNotBlank(result)) {
            return Result.SUEECSS("获取邮件验证码成功！");
        }
        return Result.ERROR("获取邮件验证码失败！");
    }

    /**
     * 功能描述: 校验邮箱验证码<br>
     *
     * @param checkEmailCodeVo 校验邮箱验证码实体
     * @return com.wocao.commom.result.Result<java.lang.String>
     * @author eggg 2021/10/29 11:19
     * @see [相关类/方法]（可选）
     * @since [产品/模块版本]（可选）
     */
    @PostMapping(value = "/checkEmailCode")
    @ApiOperation(value = "校验邮箱验证码", notes = "校验邮箱验证码")
    public Result<Void> checkEmailCode(@RequestBody @Validated CheckEmailCodeVo checkEmailCodeVo) {
        String result = emailBusiness.checkEmailCode(checkEmailCodeVo);
        if (StringUtils.isNotBlank(result)) {
            return Result.ERROR(result);
        }
        return Result.SUEECSS("校验成功！");
    }

}
